<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="app">
        <p>正常：{{msg}}</p>
        <!-- 耦合度高。js和html混为一谈 -->
        <!-- <p>{{msg.split('').reverse().join('')}}</p> -->
        <!-- 耦合度低 -->
        <p>倒序-计算属性：{{getReverseStr}}</p>
        <p>倒序-计算属性：{{getReverseStr}}</p>
        <p>倒序-计算属性：{{getReverseStr}}</p>
        <p>倒序-函数：{{getReverseStr1()}}</p>
        <p>倒序-函数：{{getReverseStr1()}}</p>
        <p>倒序-函数：{{getReverseStr1()}}</p>
        <hr>
        <p>今年的年龄：{{age}}</p>
        <p>明年的年龄：{{nextAge}}</p>
    </div>
    <script src="../vue.js"></script>
    <script>
        let vm = new Vue({
            el: '#app',
            data: {
                msg: 'hello vue',
                age: 19
            },
            // 计算属性--用来做计算的一个属性，可以理解为在data中新增了一条派生的数据，不会修改原始数据
            computed: {
                // 获取反转字符串
                getReverseStr() {
                    // 依赖缓存--当依赖（原始数据）固定不变时，无论调用多少次，都只执行一次，会将结果缓存起来，方便下次使用
                    // 使用场景：计算过程很复杂，而且需要多次使用
                    console.log('computed');
                    // this是当前的vue实例。里面包含了从Vue中继承的很多属性和方法，加了$\_以示区分
                    return this.msg.split('').reverse().join('')
                },
                nextAge() {
                    return this.age + 1
                }
            },
            methods: {
                // 没有缓存，每次调用都会重新计算重新执行
                // 无论是函数还是计算属性，当依赖更新时，数据也会自动执行
                getReverseStr1() {
                    console.log('fn');
                    return this.msg.split('').reverse().join('')
                }
            }
        })
    </script>
</body>
</html>